context("lattice")

skip_if_not_installed("lattice")
library(lattice)
library(stats)

theme <-  thematic_theme(
  "black", "white", "pink",
  font = font_spec("Rock Salt", update = TRUE)
)

test_that("lattice baselines", {
  thematic_local_theme(theme)

  expect_doppelganger("dot_plot", dotplot(variety ~ yield | year * site, data=barley))

  expect_doppelganger("level_plot", {
      x <- seq(pi/4, 5 * pi, length.out = 100)
      y <- seq(pi/4, 5 * pi, length.out = 100)
      r <- as.vector(sqrt(outer(x^2, y^2, "+")))
      grid <- expand.grid(x=x, y=y)
      grid$z <- cos(r^2) * exp(-r/(pi^3))
      levelplot(z ~ x * y, grid, cuts = 50, scales=list(log="e"), xlab="",
                ylab="", main="Weird Function", sub="with log scales",
                colorkey = FALSE, region = TRUE)
    }
  )
  expect_doppelganger("density_plot", {
      histogram( ~ height | voice.part, data = singer,
                 xlab = "Height (inches)", type = "density",
                 panel = function(x, ...) {
                   panel.histogram(x, ...)
                   panel.mathdensity(dmath = dnorm, col = "black",
                                     args = list(mean=mean(x),sd=sd(x)))
                 } )
  }
  )

  expect_doppelganger("cleveland", {
      EE <- equal.count(ethanol$E, number=9, overlap=1/4)

      ## Constructing panel functions on the fly; prepanel
      xyplot(NOx ~ C | EE, data = ethanol,
             prepanel = function(x, y) prepanel.loess(x, y, span = 1),
             xlab = "Compression Ratio", ylab = "NOx (micrograms/J)",
             panel = function(x, y) {
               panel.grid(h = -1, v = 2)
               panel.xyplot(x, y)
               panel.loess(x, y, span=1)
             },
             aspect = "xy")
    })

  expect_doppelganger("xyplot", {
      xyplot(Sepal.Length + Sepal.Width ~ Petal.Length + Petal.Width | Species,
             data = iris, scales = "free", layout = c(2, 2),
             auto.key = list(x = .6, y = .7, corner = c(0, 0)))
    })

  expect_doppelganger("interaction_plot", {
      xyplot(decrease ~ treatment, OrchardSprays, groups = rowpos,
             type = "a",
             auto.key =
               list(space = "right", points = FALSE, lines = TRUE))
      })

  expect_doppelganger("bwplot", {
      bwplot(decrease ~ treatment, OrchardSprays, groups = rowpos,
             panel = "panel.superpose",
             panel.groups = "panel.linejoin",
             xlab = "treatment",
             key = list(lines = Rows(trellis.par.get("superpose.line"),
                                     c(1:7, 1)),
                        text = list(lab = as.character(unique(OrchardSprays$rowpos))),
                        columns = 4, title = "Row position"))
    })

  expect_doppelganger("settings", show.settings())


  thematic_on("black", "white", c("orange", "blue"))
  expect_doppelganger("settings2", show.settings())
})

